
import axios from 'axios'
import router from '@route'
// 引入qs模块，用来序列化post类型的数据
import qs from 'qs'

import { BASE_API_URL } from "@utils/constant"

const service = axios.create({
    // 设置超时时间
    timeout: 60000,
    baseURL: BASE_API_URL
})

console.log('axiso');

/**
 * 请求前拦截
 * 用于处理需要在请求前的操作
 */
service.interceptors.request.use(config => {
    const token = localStorage.getItem('token');
    if (token) {
        config.headers['Authorization'] = token;
    }
    config.data = qs.stringify(config.data);
    return config;
}, (error) => {
    return Promise.reject(error);
});
/**
 * 请求响应拦截
 * 用于处理需要在请求返回后的操作
 */
service.interceptors.response.use(response => {
    const responseCode = response.status
        // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
        // 否则的话抛出错误
        if (responseCode === 0) {
            return Promise.resolve(response)
        } else {
            return Promise.reject(response)
        }
    }, error => {
            // 断网 或者 请求超时 状态
        if (!error.response) {
            // 请求超时状态
                if (error.message.includes('timeout')) {
                console.log('超时了');
            } else {
                // 可以展示断网组件
                console.log('断网了');
            }
            return;
        }
        // 服务器返回不是 2 开头的情况，会进入这个回调
        // 可以根据后端返回的状态码进行不同的操作
        const responseCode = error.response.status;
        //error.response.data.message
        const codeSlotArr = {
            '401': () =>{
                // 跳转登录页
                router.replace({
                    path: '/login',
                    query: {
                        redirect: router.currentRoute.fullPath
                    }
                });
            },
            '403': () => {
                // 弹出错误信息

                // 清除token
                localStorage.removeItem('token')
                // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
                setTimeout(() => {
                    router.replace({
                        path: '/login',
                        query: {
                        redirect: router.currentRoute.fullPath
                        }
                    })
                }, 1000);
            },
            // 404请求不存在
            '404': () => {
                
            },
            'default': () => {

            }
        };
        codeSlotArr[responseCode] ? codeSlotArr[responseCode]() : codeSlotArr['default']();
        return Promise.reject(error)
    }
)

// post请求的时候，我们需要加上一个请求头，所以可以在这里进行一个默认的设置
// 即设置post的请求头为application/x-www-form-urlencoded;charset=UTF-8
service.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

const prefixs = "";

const request = {
    get: (resUrl, resPar) => {
        return service.get(prefixs + resUrl, {
            params: resPar
        });
    },
    post: (resUrl, resPar) => {
        return service.post(prefixs + resUrl, resPar);
    },
    put: (resUrl, resPar) => {
        return service.put(prefixs + resUrl, resPar);
    },
    delete: (resUrl, resPar) => {
        return service.delete(prefixs + resUrl, {
            params: resPar
        });
    }
}
export default request;